package com.pubinfo.passbook.common.entity;

import java.text.SimpleDateFormat;
import java.io.Serializable;
import java.util.Date;
import java.util.List;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pubinfo.passbook.common.handler.rabbitmq.*;
import com.pubinfo.passbook.common.model.bo.rabbitmq.*;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.SneakyThrows;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;

/**
 * <p>
 *
 * </p>
 *
 * @author xuhong
 * @since 2021-10-25
 */
@Data
@NoArgsConstructor
@TableName(value = "t_rabbitmq_org", autoResultMap = true)
public class TRabbitmqOrg implements Serializable {
  
  @TableField(exist = false)
  private static final long serialVersionUID = 1L;
  
  /**
   * 序列号
   */
  private String serial;
  
  /**
   * 类型，标识同步的是组织还是人员。
   */
  private String type;
  
  /**
   * 处理方式，在主数据平台操作的类型。
   */
  private String handle;
  
  /**
   * 组织标识
   */
  @TableField(typeHandler = FastjsonTypeHandler.class)
  private JSONObject context;
  
  @TableId(type = IdType.INPUT)
  private Long orgId;
  
  /**
   * 组织名称
   */
  private String orgName;
  
  /**
   * 组织编码
   */
  private String orgCode;
  
  /**
   * 组织简称
   */
  private String shortName;
  
  /**
   * 组织英文简称
   */
  private String orgNameEn;
  
  /**
   * 组织全称
   */
  private String fullName;
  
  /**
   * 组织专业称谓
   */
  private String orgBizName;
  
  /**
   * 农村/城镇标志
   */
  private String cityTown;
  
  /**
   * 组织办公电话
   */
  private String officePhone;
  
  /**
   * 成立时间
   */
  private String foundingTime;
  
  /**
   * 组织规模
   */
  private String orgScale;
  
  /**
   * 组织层级
   */
  private String orgLevel;
  
  /**
   * 组织岗位级别
   */
  private String orgPositionLevel;
  
  /**
   * 化小承包编码
   */
  private Long orgMartCode;
  
  /**
   * 排序号
   */
  private String sort;
  
  /**
   * 组织简介
   */
  private String orgContent;
  
  /**
   * 组织描述
   */
  private String orgDesc;
  
  /**
   * 地址
   */
  private String address;
  
  /**
   * UUID
   */
  private String uuid;
  
  /**
   * 状态
   */
  private String statusCd;
  
  /**
   * 创建时间
   */
  @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  private Date createDate;
  
  /**
   * 创建人
   */
  private Integer createUser;
  
  /**
   * 修改时间
   */
  @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
  private Date updateDate;
  
  /**
   * 修改人
   */
  private Integer updateUser;
  
  /**
   * 状态时间
   */
  @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
  private Date statusDate;
  
  /**
   * 扩展信息
   */
  @TableField(typeHandler = ExtendinfoTypeHandler.class)
  private List<Extendinfo> extendinfo;
  
  /**
   * 组织层级
   */
  @TableField(typeHandler = FastjsonTypeHandler.class)
  private JSONObject orgLevels;
  
  /**
   * 上下级关系
   */
  @TableField(typeHandler = FastjsonTypeHandler.class)
  private JSONObject orgRelations;
  
  /**
   * 组织类别
   */
  @TableField(typeHandler = OrgTypeCodeTypeHandler.class)
  private List<OrgTypeCode> orgTypes;
  
  /**
   * 组织跨域关系
   */
  @TableField(typeHandler = OrgCrossRelationsTypeHandler.class)
  private List<OrgCrossRelations> orgCrossRelations;
  
  /**
   * 组织证件关系
   */
  @TableField(typeHandler = OrgCertsTypeHandler.class)
  private List<OrgCerts> orgCerts;
  
  /**
   * 组织联系人
   */
  @TableField(typeHandler = ContactRelationsTypeHandler.class)
  private List<ContactRelations> contactRelations;
  
  /**
   * 组织行政区域
   */
  @TableField(typeHandler = FastjsonTypeHandler.class)
  private JSONObject politicalLocationInfo;
  
  /**
   * 区号信息
   */
  @TableField(typeHandler = FastjsonTypeHandler.class)
  private JSONObject areaCodeInfo;
  
  /**
   * 所在树信息
   */
  @TableField(typeHandler = OrgOrgTreeRelListTypeHandler.class)
  private List<OrgOrgTreeRel> orgOrgTreeRel;
  
  /**
   * 同步时间
   */
  @TableField(fill = FieldFill.INSERT)
  @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
  private Date createTime;
  
  /**
   * 修改时间
   */
  @TableField(fill = FieldFill.UPDATE)
  @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
  private Date updateTime;
  
  
  @SneakyThrows
  public TRabbitmqOrg(RabbitMqRoot root) {
    BeanUtils.copyProperties(root, this);
    BeanUtils.copyProperties(root.getContext(), this);
    Context context = root.getContext();
    
    String createDate = context.getCreateDate();
    String updateDate = context.getUpdateDate();
    String statusDate = context.getStatusDate();
    this.context = JSONObject.parseObject(JSON.toJSONString(context));
    if (StringUtils.isNotBlank(createDate)) {
      this.createDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(createDate);
    }
    
    if (StringUtils.isNotBlank(updateDate)) {
      this.updateDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(updateDate);
    }
    
    if (StringUtils.isNotBlank(statusDate)) {
      this.statusDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(statusDate);
    }
    
  }
  
}
